package Thread;

import java.util.Scanner;
/*
* 可见性：在多线程环境下，每个线程都有自己的工作内存，变量的值会被缓存在工作内存中。
* 当一个线程修改了变量的值，其他线程可能无法立即看到这个修改后的值。
* 而使用 volatile 修饰的变量，当一个线程修改了该变量的值
* 会立即将修改后的值刷新到主内存中，同时其他线程在使用该变量时，
* 会直接从主内存中读取最新的值，从而保证了变量在多个线程之间的可见性。
* */

public class Demo17 {
    private static volatile int isQuit = 0;
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            while (isQuit == 0) {
                // 循环体里啥都没干.
                // 此时意味着这个循环, 一秒钟就会执行很多很多次.
            }
            System.out.println("t1 退出!");
        });
        t1.start();

        Thread t2 = new Thread(() -> {
            System.out.println("请输入 isQuit: ");
            Scanner scanner = new Scanner(System.in);
            // 一旦用户输入的值, 不为 0, 此时就会使 t1 线程执行结束.
            isQuit = scanner.nextInt();
        });
        t2.start();
    }
}
